#pragma once
#include <memory>
#include <string>

#include "Config.h"
#include <boost/smart_ptr/shared_ptr.hpp>
#include "Types.h"

namespace TrueText {

class TextImpl;
class TextBounds;
class Font;
class BitmapInfo;
struct Point;
struct TextLayout;
	
class Text
{
public:
    Text(const Font& font);

    Text(const Text& rhs);
    const Text& operator=(const Text& rhs);
    ~Text();

	const std::wstring& GetString() const;
	void SetString(const std::wstring& value);

	int GetClipWidth() const;
	void SetClipWidth(int value);
	
	void SetTextAlign(TextAlign align);
	TextAlign GetTextAlign() const;

    const TextBounds& GetBounds();
	void Render(const BitmapInfo& output);
	void Render(const BitmapInfo& output, const Point& offset);

	const TextLayout& GetLayout();
private:
    boost::shared_ptr<TextImpl> impl;
};

} // namespace TrueText
